package com.rm.vip.mq.demo.pubsub;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.junit.Test;

import javax.jms.*;

/**
 * @ProjectName: mq-demo
 * @Auther: GERRY
 * @Date: 2019/2/25 20:28
 * @Description: 持久订阅方式
 * 1、为连接设置ClientID
 * 2、为订阅的主题制定一个ClientID
 */
public class TopicPersistenceConsumer {
    @Test
    public void testTopicConsumer() throws Exception {
        // 创建一个ConnectionFactory对象连接MQ服务器
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        // 创建一个连接对象
        Connection connection = connectionFactory.createConnection();
        // 设置CLientID
        connection.setClientID("rm-vip1");
        // 开启连接
        connection.start();
        // 使用Connection对象创建一个Session对象
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 创建一个Destination对象。topic对象
        Topic topic = session.createTopic("test-topic ");
        // 使用Session对象创建一个持久订阅消费者对象。
        MessageConsumer consumer = session.createDurableSubscriber(topic, "rm-vip1");
        // 生产者发送的消息默认是持久的(注意点)
        // producer.setDeliveryMode(DeliveryMode.PERSISTENT);

        // 接收消息
        consumer.setMessageListener(new MessageListener() {

            @Override
            public void onMessage(Message message) {
                // 打印结果
                TextMessage textMessage = (TextMessage) message;
                String text;
                try {
                    text = textMessage.getText();
                    System.out.println("这是接收到的消息： " + text);
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
        System.out.println("topic消费者启动。。。。 ");
        // 等待接收消息
        System.in.read();
        // 关闭资源
        consumer.close();
        session.close();
        connection.close();
    }
}
